home *** CD-ROM | disk | FTP | other *** search
/ Suzy B Software 2 / Suzy B Software CD-ROM 2 (1994).iso / animatin / anim_q2z / stedemo / demo.s < prev    next >
Encoding:
Text File  |  1995-04-26  |  12.3 KB  |  402 lines

  1. ; Demo STE
  2. ; --------
  3. ; by Martin Backschat, editor of ST-Magazin, Markt&Technik AG, West Germany
  4. ; ! this demo is public domain !
  5.  
  6. ; for what: Demo showing the new features of the STE
  7. ; - horizontical hardware scrolling of 70 lines (4 bitplanes)
  8. ; - digital sound output (monitor speakers & stereo output)
  9. ; - all 4096 colors on screen
  10.  
  11. ; by the way, demo was developped using OMIKRON.ASSEMBLER!
  12. ; but i think it works fine with different assemblers.
  13. ; please notice, that no code optimation (branches...) was done, due to
  14. ; the fact omikron.assembler optimizes automatically.
  15.  
  16. splitline:      EQU 70
  17.  
  18.                 TEXT
  19. ; create 4096 color palette in >mypalette< ------------
  20.           lea           calcpal,A1      ; pointer to table 3210->0321 color form
  21.           lea           mypalette,A0
  22.  
  23.           move.w        #0,D5           ; start with color 000
  24.           move.w        #128-1,D7       ; generate 128 lines
  25. b:
  26.           move.w        #32-1,D6        ; 128 lines by 32 COLORS per line
  27.           move.w        D5,D0
  28. a:
  29. ; transform color 3210 into 0321
  30.           move.w        D0,-(SP)
  31.           cmpi.w        #16,D6
  32.           bge           ok
  33.           move.w        D0,D1
  34.           not.w         D1
  35.           andi.w        #$0F00,D1
  36.           andi.w        #$FF,D0
  37.           or.w          D1,D0
  38.           addi.w        #$80,D0
  39. ok:
  40.           move.w        D0,D2
  41.           andi.w        #$0F,D2
  42.           lsl.w         #1,D2
  43.           move.w        0(A1,D2.w),D2
  44.           move.w        D0,D3
  45.           andi.w        #$F0,D3
  46.           lsr.w         #3,D3
  47.           move.w        0(A1,D3.w),D3
  48.           lsl.w         #4,D3
  49.           add.w         D3,D2
  50.           move.w        D0,D4
  51.           andi.w        #$0F00,D4
  52.           lsr.w         #7,D4
  53.           move.w        0(A1,D4.w),D4
  54.           lsl.w         #8,D4
  55.           add.w         D4,D2
  56.           move.w        D2,(A0)+
  57.           move.w        (SP)+,D0
  58.  
  59.           addi.w        #$0100,D0
  60.           dbra          D6,a
  61.           addq.w        #1,D5
  62.           dbra          D7,b
  63.  
  64.  
  65. ; system initiation ----------------
  66.  
  67.           clr.l         -(SP)
  68.           move.w        #$20,-(SP)
  69.           trap          #1              ; enter super mode
  70.           lea           stack,SP        ; my own stack!
  71.           move.l        D0,spvi
  72.  
  73.           cmpi.w        #$E0,$68        ; Ste or normal ST?
  74.           bne           abort           ; (using hbl is foul, but it works!)
  75.  
  76.           move.w        #4,-(SP)
  77.           trap          #14             ; save resolution
  78.           addq.l        #2,SP
  79.           cmp.w         #2,D0
  80.           beq           abort           ; not working in monochrome!
  81.           move.w        D0,-(SP)
  82.  
  83.           move.w        #2,-(SP)
  84.           trap          #14
  85.           addq.l        #2,SP
  86.           move.l        D0,-(SP)        ; save screen location
  87.           move.l        D0,-(SP)
  88.  
  89.           clr.w         -(SP)
  90.           pea           -1
  91.           pea           -1
  92.           move.w        #5,-(SP)
  93.           trap          #14             ; enter low res.
  94.           lea           12(SP),SP
  95.           move.w        #37,-(SP)
  96.           trap          #14             ; make sure we're in lowres
  97.           addq.l        #2,SP
  98.  
  99. ; --- load sound file
  100.  
  101.           clr.w         -(SP)
  102.           pea           sound
  103.           move.w        #$3D,-(SP)
  104.           trap          #1
  105.           addq.l        #8,SP
  106.           tst.w         D0
  107.           bmi           abort           ; open error -> exit programme
  108.           move.w        D0,-(SP)
  109.  
  110.           pea           sndstart        ; load 122226 of sound file
  111.           pea           122226
  112.           move.w        D0,-(SP)
  113.           move.w        #$3F,-(SP)
  114.           trap          #1
  115.           lea           12(SP),SP
  116.  
  117.           move.w        #$3E,-(SP)
  118.           trap          #1
  119.           addq.l        #4,SP
  120.  
  121. ; --- load degas elite picture
  122.  
  123.           clr.w         -(SP)
  124.           pea           muster
  125.           move.w        #$3D,-(SP)
  126.           trap          #1
  127.           addq.l        #8,SP
  128.           tst.w         D0
  129.           bmi           abort           ; open error -> exit programme
  130.           move.w        D0,-(SP)
  131.  
  132.           pea           picture
  133.           pea           32034
  134.           move.w        D0,-(SP)
  135.           move.w        #$3F,-(SP)
  136.           trap          #1
  137.           lea           12(SP),SP
  138.  
  139.           move.w        #$3E,-(SP)
  140.           trap          #1
  141.           addq.l        #4,SP
  142.  
  143. ; prepare screen ----------------
  144.  
  145.           lea           pic+(splitline*160),A0 ; address of 4096 color screen
  146.           move.l        A0,picline69
  147.  
  148.           lea           pic,A0
  149.           lea           scrollpic,A1    ; screen for double-lined screen
  150.           move.w        #splitline-1,D0
  151. ps0:
  152.           move.w        #40-1,D1
  153. ps1:
  154.           move.l        (A0)+,(A1)+
  155.           dbra          D1,ps1
  156.           lea           -160(A0),A0
  157.           move.w        #40-1,D1        ; duplicate each line
  158. ps2:
  159.           move.l        (A0)+,(A1)+
  160.           dbra          D1,ps2
  161.           dbra          D0,ps0
  162.  
  163.  
  164. ; feeze system -----------------
  165.  
  166.           move          #$2700,SR
  167.  
  168.           lea           $FF8240,A0
  169.           lea           oldpal,A1
  170.           move.w        #15,D0
  171. savpal:
  172.           move.w        (A0)+,(A1)+     ; save old color palette
  173.           dbra          D0,savpal
  174.  
  175.           lea           $FFFA00,A0
  176.           movep.w       $07(A0),D0      ; save enable-register a,b
  177.           movep.w       $13(A0),D1      ; save mask-register a,b
  178.           movem.w       D0-D1,-(SP)
  179.           move.b        #1,$13(A0)      ; enable TiB
  180.           clr.b         $15(A0)
  181.  
  182.           move.l        $70,-(SP)
  183.           move.l        #vbl,$70        ; set my own vbl
  184.           move.l        #timerb1,$0120  ; set my own TiB-irq (first of 3)
  185.           move.l        #mypalette,palptr ; initially point to head of palette
  186.  
  187. ; ------------ enable digital sound
  188.  
  189.           lea           $FF8900,A0
  190.           move.l        #sndend,D0
  191.           movep.l       D0,$0D(A0)
  192.           move.l        #sndstart,D0
  193.           movep.l       D0,1(A0)
  194.  
  195.           move.w        #$07FF,$24(A0)
  196.           move.w        #%10011101000,D0 ; master volume 0 db
  197.           bsr           writemw
  198.           move.w        #%10101110100,D0 ; left channel 0 db
  199.           bsr           writemw
  200.           move.w        #%10100110100,D0 ; right channel 0 db
  201.           bsr           writemw
  202.           move.w        #%10010110000,D0 ; set treble 0 db
  203.           bsr           writemw
  204.           move.w        #%10001110110,D0 ; set bass 0 db
  205.           bsr           writemw
  206.  
  207.           move.w        #%10000010,$20(A0) ; mono 25 kHz
  208.           move.w        #%11,$00(A0)    ; enable loop sound
  209.  
  210.           move          #$2300,SR       ; enable my work
  211.  
  212. ; the wait-for-godot do-nothing-routine -------------
  213.  
  214. wait:
  215.           cmpi.b        #$39,$FFFC02    ; wait for SPACE
  216.           bne           wait
  217.  
  218. ; enable system --------------
  219.  
  220.           move          #$2700,SR       ; hold my work
  221.  
  222.           clr.w         $FF8900         ; stop sound
  223.           lea           $FF8200,A0
  224.           clr.b         $0F(A0)         ; clear low byte of screen location
  225.           clr.b         $0D(A0)         ; clear linewid
  226.           clr.b         $65(A0)         ; clear hscroll
  227.  
  228.           move.l        (SP)+,$70       ; restore vbl
  229.  
  230.           movem.w       (SP)+,D0-D1
  231.           lea           $FFFA00,A0
  232.           movep.w       D0,$07(A0)      ; restore mfp-registers
  233.           movep.w       D1,$13(A0)
  234.  
  235.           lea           oldpal,A0
  236.           lea           $FF8240,A1
  237.           move.w        #15,D0
  238. restpal:  move.w        (A0)+,(A1)+
  239.           dbra          D0,restpal      ; restore old color palette
  240.  
  241.           move          #$2300,SR       ; enable system work finally
  242.  
  243.           move.w        #5,-(SP)
  244.           trap          #14             ; restore resolution
  245.           lea           12(SP),SP
  246.  
  247. abort:
  248.           move.l        spvi,-(SP)
  249.           move.w        #$20,-(SP)
  250.           trap          #1              ; back to user mode
  251.           clr.w         -(SP)
  252.           trap          #1              ; quit programm
  253.  
  254.  
  255. ; ------------ my own vbl
  256. vbl:
  257.           lea           $FF8200,A0
  258.           move.b        #80,D3          ; linewid = 80 words
  259.  
  260.           move.l        #scrollpic,D0   ; scroll upper part of screen
  261.           move.l        offs,D1
  262.           move.w        bitoffs,D2
  263.           cmpi.b        #16-1,D2
  264.           blo           vblscr1
  265.           clr.w         D2
  266.           cmp.l         #160-8,D1       ; reach end of line?
  267.           bge           vblscr1a
  268.           addq.l        #8,D1
  269.           bra           vblscr2
  270. vblscr1a:
  271.           clr.l         D1
  272.           bra           vblscr2
  273. vblscr1:
  274.           addi.b        #1,D2
  275.           subi.b        #4,D3
  276. vblscr2:
  277.           move.b        D2,$65(A0)
  278.           move.w        D2,bitoffs
  279.           move.b        D3,$0F(A0)
  280.           move.l        D1,offs
  281.           add.l         D1,D0
  282.           movep.l       D0,$03(A0)
  283.  
  284.           movem.l       picpalette,D0-D7 ; use my own colors in upper part
  285.           movem.l       D0-D7,$40(A0)
  286.  
  287.           move.b        #1,$FFFA07      ; enable TiB-irq
  288.           clr.b         $FFFA1B
  289.           move.b        #splitline,$FFFA21 ; countdown 1 line
  290.           move.b        #8,$FFFA1B
  291.           move.l        #timerb1,$0120  ; reset TiB-irq-pointer
  292.  
  293.           move.l        #mypalette,palptr ; initialize palptr for TiB-irq
  294.           rte
  295.  
  296. ; ------------ my own TiB-irq
  297. timerb1:
  298.           lea           $FF8200,A0
  299.           clr.b         $0F(A0)         ; linewid = 0 words
  300.           clr.b         $65(A0)         ; hscroll = 0
  301.           move.l        picline69,D0    ; set screen location
  302.           movep.l       D0,$03(A0)
  303. ss:
  304.           move.l        #timerb2,$0120  ; set pointer to routine II
  305.           clr.b         $FFFA1B
  306.           move.b        #1,$FFFA21      ; wait for 1 line
  307.           move.b        #8,$FFFA1B
  308.           bclr          #0,$FFFA0F      ; serve TiB in
  309.           rte
  310.  
  311. timerb2:
  312.           movea.l       palptr,A5
  313.           lea           $FF8242,A6
  314.           move.l        (A5)+,(A6)+     ; write  32 colors (15+15+2)
  315.           move.l        (A5)+,(A6)+
  316.           move.l        (A5)+,(A6)+
  317.           move.l        (A5)+,(A6)+
  318.           move.l        (A5)+,(A6)+
  319.           move.l        (A5)+,(A6)+
  320.           move.l        (A5)+,(A6)+
  321.           move.w        (A5)+,(A6)+
  322.           lea           $FF8242,A6
  323.           move.l        (A5)+,(A6)+
  324.           move.l        (A5)+,(A6)+
  325.           move.l        (A5)+,(A6)+
  326.           move.l        (A5)+,(A6)+
  327.           move.l        (A5)+,(A6)+
  328.           move.l        (A5)+,(A6)+
  329.           move.l        (A5)+,(A6)+
  330.           move.w        (A5)+,(A6)
  331.           move.l        (A5)+,$FF8242
  332.           move.l        A5,palptr
  333.           bclr          #0,$FFFA0F
  334.           rte
  335.  
  336. ; subroutine for writing data into microwire-interface
  337. writemw:
  338.           cmpi.w        #$07FF,$FF8924
  339.           bne           writemw
  340.           move.w        D0,$FF8922
  341.           rts
  342.  
  343.  
  344. ; ------------  DATA STORAGE
  345.                 DATA
  346. muster:
  347.                 DC.B "stedemo.pi1",0
  348. sound:
  349.                 DC.B "stedemo.snd",0
  350.                 EVEN
  351.  
  352. calcpal:
  353.                 DC.W 0,%1000,%1,%1001,%10
  354.                 DC.W %1010,%11,%1011
  355.                 DC.W %100,%1100,%101
  356.                 DC.W %1101,%110,%1110,%111,%1111
  357.  
  358. rainbow:
  359.                 DC.W $0432,$0543,$0654,$0765
  360.                 DC.W $20,$40,$50,$70,$05,$07
  361.                 DC.W 0,0,0,0,0
  362.                 DC.W $0432,$0543,$0654,$0765
  363.                 DC.W $20,$40,$50,$70,$05,$07
  364.                 DC.W 0,0,0,0,0
  365.                 DC.W $0432,$0543
  366.  
  367. ; ------------  RANDOM DATA STORAGE
  368.                 BSS
  369. spvi:
  370.                 DS.L 1
  371. palptr:
  372.                 DS.L 1
  373. oldpal:
  374.                 DS.L 16         ; Original color palette
  375.  
  376. picline69:
  377.                 DS.L 1
  378. offs:
  379.                 DS.L 1
  380. bitoffs:
  381.                 DS.W 1
  382.  
  383. picture:
  384.                 DS.W 1
  385. picpalette:
  386.                 DS.W 16
  387. pic:
  388.                 DS.B 32000
  389.  
  390.                 DS.L 256
  391. stack:
  392.  
  393. mypalette:
  394.                 DS.W 4096
  395. scrollpic:
  396.                 DS.B splitline*160*2 ; double width
  397. sndstart:
  398.                 DS.W 122226/2
  399. sndend:
  400.  
  401.                 END
  402.